import java.util.*;

public class day6 {
    /**
     * 小红的子串
     * https://ac.nowcoder.com/acm/problem/260770
     */
    public static int n;
    public static char[] s;

    public static void main3(String[] args) {
        Scanner in = new Scanner(System.in);
        n = in.nextInt();
        int l = in.nextInt();
        int r = in.nextInt();
        s = in.next().toCharArray();

        // 前缀和：求区间
        // 比如区间为 [3,5]
        // 求 [1,5] - [1,2] 的到的就是 [3,5] 区间的值
        // 之后使用滑动窗口进行计算以哪个为结尾的区间的字符个数
        System.out.println(func(r) - func(l - 1));
    }

    public static long func(int x) {
        long ret = 0; // 统计这个区间有多少个字符串
        int right = 0,left = 0;
        int[] hash = new int[26]; // 进行统计出现的次数，在一个滑动窗口中
        long kind = 0; // 统计区间的种类个数，不能超过 x

        while(right < n) {
            // 入窗口
            if(hash[s[right] - 'a']++ == 0) {
                kind++;
            }
            // 出窗口
            while(kind > x) {
                if(hash[s[left] - 'a']-- == 1) {
                    kind--;
                }
                left++;
            }
            // 更新数据
            // 统计以 right为结尾的所有 字符串的个数
            // 就是 right到left 区间的长度
            ret += right - left + 1;
            right++;
        }
        return ret;
    }



    /**
     * DP44 兑换零钱
     * https://www.nowcoder.com/practice/67b93e5d5b85442eb950b89c8b77bc72?tpId=230&tqId=40432&ru=/exam/oj
     */
    // 不进行优化
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int aim = in.nextInt();
        int[] arr = new int[n + 1];
        for(int i = 1;i <= n;i++) {
            arr[i] = in.nextInt();
        }

        int[][] dp = new int[n + 1][aim + 1];
        for(int j = 1;j <= aim;j++) {
            dp[0][j] = 0x3f3f3f3f;
        }
        dp[0][0] = 0;

        for(int i = 1;i <= n;i++) {
            for(int j = 0;j <= aim;j++) {
                dp[i][j] = dp[i - 1][j];
                if(j >= arr[i]) {
                    // 选择，不知选多少，可以进行多选
                    dp[i][j] = Math.min(dp[i][j],dp[i][j - arr[i]] + 1);
                }
            }
        }

        if(dp[n][aim] >= 0x3f3f3f3f) {
            System.out.println(-1);
        }else {
            System.out.println(dp[n][aim]);
        }
    }
    // 优化：
    public static void main2(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int aim = in.nextInt();
        int[] arr = new int[n + 1];
        for(int i = 1;i <= n;i++) {
            arr[i] = in.nextInt();
        }

        int[] dp = new int[aim + 1];
        for(int j = 1;j <= aim;j++) {
            dp[j] = 0x3f3f3f3f;
        }
        dp[0] = 0;

        for(int i = 1;i <= n;i++) {
            for(int j = arr[i];j <= aim;j++) {
                // 选择，不知选多少，可以进行多选
                dp[j] = Math.min(dp[j],dp[j - arr[i]] + 1);
            }
        }

        if(dp[aim] >= 0x3f3f3f3f) {
            System.out.println(-1);
        }else {
            System.out.println(dp[aim]);
        }
    }



    /**
     * MT1 最大差值
     * 牛客
     */
    public int getDis (int[] A, int n) {
        // write code here
        int ret = 0;
        int minValue = A[0];
        for(int i = 1;i < n;i++) {
            minValue = Math.min(minValue,A[i]);
            ret = Math.max(ret,A[i] - minValue);
        }
        return ret;
    }
}
